import ffmpeg from 'fluent-ffmpeg';
import ffprobe from 'ffprobe-static';
import fs from 'node:fs';
import path from 'node:path';

ffmpeg.setFfprobePath(ffprobe.path);

// 输入文件路径
const audioFilePath = 'C:\\Users\\3D\\Desktop\\E1-audio.mp3'; // 替换为你的MP3音频文件路径
const imageDir = 'E:\\AI输出\\格式工厂混流1'; // 替换为你的图片目录路径
const outputVideoPath = 'E:\\AI输出\\video_with_audio1.mp4'; // 输出视频文件路径

// 输出视频文件
// const outputVideo = 'output1.mp4';

// 读取图片目录下所有图片文件数量
const imageFilesLen = fs
  .readdirSync(imageDir)
  .filter(file => file.match(/\.(jpg|jpeg|png|gif)$/)).length;

// ffmpeg.setNvenc()
// 获取音频的总时长（秒）
ffmpeg.ffprobe(audioFilePath, (err, metadata) => {
  if (err) {
    console.error('无法获取音频元数据:', err);
    return;
  }

  const audioDuration = parseFloat(metadata.format.duration);
  console.log('音频总时长:', audioDuration, '秒');

  const fps = String(imageFilesLen / audioDuration);

  ffmpeg()
    .addInput(path.join(imageDir, '%d.png'))
    // .input(imageDir)
    // .inputOptions('-pattern_type', 'glob')
    // .inputOptions('-i', '*.png')
    .inputOptions('-framerate', fps)

    //  .outputOptions('-c:v libx264')   //正常是这种软件编码
    .outputOption('-c:v h264_nvenc') // N卡硬件编码  hevc_nvenc    hevc_cuvid
    .outputOptions('-r', fps)
    .outputOptions('-preset fast')
    .input(audioFilePath)
    .on('error', err => {
      console.error('转换错误: ', err);
    })
    .on('end', () => {
      console.log('转换完成: ', outputVideoPath);
    })
    .on('progress', progress => {
      console.log('处理进度:', progress.percent);
    })

    .output(outputVideoPath)
    .run();
});

// ffmpeg -hwaccel cuvid -i %d.jpg -c:v h264_nvenc -c:v h264_nvenc output.mp4
